物件擴充的修改與調整
是針對物件本身(請牢記!!)
preventExtensions 防止擴充
var family = {
a: 1,
b: 2,
c: {},
}
// preventExtensions 防止擴充
console.log('是否可被擴充',Object.isExtensible(family)); // true
Object.preventExtensions(family);
console.log('是否可被擴充',Object.isExtensible(family)); // false
// getOwnPropertyDescriptor 觀看物件屬性的特徵為何
console.log('family a 的屬性特徵' , Object.getOwnPropertyDescriptor(family,'a'));
// 特徵皆為true
// 調整屬性
family.a = 'a';
// 新增屬性
family.d = 'a'; // 無法新增
// 巢狀屬性調整
family.c.a = 'ca';
// 調整特徵
Object.defineProperty(family,'a',{
configurable: false,
})
// 刪除
delete family.b;
// 結果
console.log(family);
console.log('family a 屬性特徵(嘗試修改後)', Object.getOwnPropertyDescriptor(family,'a'));
seal 封裝
var family = {
a: 1,
b: 2,
c: {},
}
// seal 封裝
// 物件物件屬性無法新增刪除,也無法重新配置特徵,但是可以調整目前屬性值
// seal 是 preventExtensions 加上 上述的限制
console.log('是否可被擴充',Object.isExtensible(family)); // true
Object.seal(family);
console.log('是否可被擴充',Object.isExtensible(family)); // false
console.log('是否被封裝',Object.isSealed(family)); // true
console.log('family a 的屬性特徵' , Object.getOwnPropertyDescriptor(family,'a'));
// 這裡 configurable 為 false
// 調整屬性
family.a = 'a';
// 新增屬性
family.d = 'a'; // 無法新增
// 巢狀屬性調整
family.c.a = 'ca';
// 調整特徵 (無法調整 writable 一樣為true)
Object.defineProperty(family,'a',{
writable: false,
})
// 刪除 (無法刪除)
delete family.b;
// 結果
console.log(family);
console.log('family a 屬性特徵(嘗試修改後)', Object.getOwnPropertyDescriptor(family,'a'));
freeze 凍結
var family = {
a: 1,
b: 2,
c: {},
}
// freeze 凍結
// 物件加上 seal , 並且無法調整值
Object.freeze(family);
console.log('是否可被擴充',Object.isExtensible(family)); // false
console.log('是否被封裝',Object.isSealed(family)); // true
console.log('是否被凍結',Object.isFrozen(family)); // true
console.log('family a 的屬性特徵' , Object.getOwnPropertyDescriptor(family,'a'));
// 這裡 configurable writable 為 false
// 調整屬性
family.a = 'a';
// 新增屬性
family.d = 'a'; // 無法新增
// 巢狀屬性調整
family.c.a = 'ca';
// 調整特徵 (無法調整 會跳出錯誤)
// Object.defineProperty(family,'a',{
// writable: true,
// })
// 刪除 (無法刪除)
delete family.b;
// 結果
console.log(family);
console.log('family a 屬性特徵(嘗試修改後)', Object.getOwnPropertyDescriptor(family,'a'));
那今天的介紹就到這裡
若有任何問題 或 內容有誤
都可以跟我說唷